// function o() {
//     return (o =
//         Object.assign ||
//         function (e) {
//             for (var t = 1; t < arguments.length; t++) {
//                 var o = arguments[t];
//                 for (var i in o)
//                     if (Object.prototype.hasOwnProperty.call(o, i)) {
//                         e[i] = o[i];
//                     }
//             }
//             return e;
//         }).apply(this, arguments);
// }

// function i(e, t) {
//     if (void 0 === t) {
//         t = "";
//     }
//     var o = cc.sys.localStorage.getItem(e);
//     return null === o || "" === o ? t + "" : o;
// }
// require("./AL_Framework_Sdk_Ad_Config_Data");
// window.spot_data = [];
// window.pause_spot_interval = 3;
// window.result_spot_interval = 3;
// window.pause_spot_start_index = 3;
// window.result_spot_start_index = 3;
// window.pause_spot_time = 10;
// window.result_spot_time = 10;
// window.help_open_id = "";
// window.on_Hide_Have_Load_Scene = !0;
// window.openid = "";
// window.openid_uuid = "";
// window.AL_User_Info = {
//     huoqu_open_id: function () {
//         return user_default.get_string_for_key("openid", openid);
//     },
//     shezhi_open_id: function (e) {
//         openid = e;
//         user_default.set_data_for_key("openid", e);
//     },
//     huoqu_open_id: function () {
//         return user_default.get_string_for_key("ailin_sdk_openid_uuid", openid_uuid);
//     }
// };
// if (!window.wsurl) {
//     window.wsurl = "wss://battle.flowerme.com/battle/v2/726f6f6d?uid=" + openid;
// }
// if (!window.u_info) {
//     window.u_info = {
//         gameid: 100001,
//         uid: openid,
//         nick: "好友",
//         icon: "",
//         sex: 0,
//         city: "",
//         country: "",
//         province: "",
//         from: "wechat"
//     };
// }
// window.match_info = {
//     nick: "好友",
//     icon: "",
//     sex: 0,
//     city: "",
//     country: "",
//     province: "",
//     from: "wechat"
// };
// window.main_Scnee_From_Small_Game = !1;
// window.main_game_scene = "";
// window.localCardKey = "localCardNum";
// window.netCardNum = 0;
// window.canGetNetCardNum = !0;
// window.getNetCardTime = 1e4;
// window.canGetLocalCard = !1;
// window.getLocalCareId = "";
// window.wxData = {
//     WXforward: "",
//     session_key: "",
//     appId: window.wx_app_id,
//     appSecret: window.wx_app_secret,
//     bannerID: "",
//     params: null,
//     checkShareSuccessNumIntervalTime: 10,
//     shareOnlineData: "",
//     bannerOnlindDelayTime: 50,
//     shareData: [],
//     moreGameData: []
// };
// window.quickGame = {
//     awardGoldDouble: 1,
//     awardGoldTime: 30,
//     RecommendIconData: [],
//     RecommendBannerData: [],
//     awardGoldData: [],
//     adBaseUrl: ""
// };
// window.PI = 3.141592654;
// window.ailin = module.exports = {
//     Props_Base_Gold: 800,
//     Key_OncePlayerTime: "begingGameTime",
//     Key_OncePlayerTimeDay: "begingGameTimeDay",
//     Key_NewPlayer: "isNewPlayer",
//     Key_Diamond: "Key_Diamond",
//     Key_Gold: "Key_Gold",
//     Key_Music: "Key_BgMusic",
//     Key_Sound: "Key_Sound",
//     Key_Vibrate: "Key_Vibrate",
//     _SceneScale: 1,
//     _offsetX: 0,
//     _offsetY: 0,
//     Language_ch: !0
// };
// window.language = "zh";
// if (cc.sys.language != cc.sys.LANGUAGE_CHINESE) {
//     ailin.Language_ch = !1;
//     language = "zh";
// }
// window.AL_CLOSE_TYPE = {
//     ONEDAY: "ONEDAY",
//     ONEWEEK: "ONEWEEK",
//     January: "January",
//     lasting: "lasting"
// };
// window.AL_Order_Status = {
//     ready: 0,
//     buy: 1,
//     cancel: 2,
//     fail: 3,
//     give: 4
// };
// window.AL_AD_TYPE = {
//     END: "GAMEEND",
//     FAIL: "FAIL",
//     WIN: "WIN",
//     TRUN: "TRUN",
//     SIGN: "SIGN",
//     SKIN: "SKIN",
//     FREEGOLD: "FREEGOLD",
//     ACHIEVE: "ACHIEVE",
//     OTHER: "OTHER"
// };
// window.user_default = module.exports = {
//     get_bool_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = "false";
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         if (!("false" == t)) {
//             t = t ? "true" : "false";
//         }
//         return "true" == i(e, t);
//     },
//     get_int_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = 0;
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         var o = i(e, t);
//         return parseInt(o);
//     },
//     get_string_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = "";
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         return i(e, t);
//     },
//     get_float_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = 0;
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         var o = i(e, t);
//         return parseFloat(o);
//     },
//     set_data_for_key: function (e, t) {
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         cc.sys.localStorage.setItem(e, t);
//     },
//     set_bool_for_key: function (e, t) {
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         t = t ? "true" : "false";
//         cc.sys.localStorage.setItem(e, t);
//     }
// };
// window.get_random = function (e, t) {
//     var o = t - e;
//     return parseInt(Math.random() * o) + e;
// };
// window.get_can_share = function () {
//     return cc.sys.platform === cc.sys.WECHAT_GAME && wxServerVersion >= wx_game_version;
// };
// window.getTime = function () {
//     return new Date().getTime();
// };
// window.get_time_day = function () {
//     var e = new Date();
//     return 1e4 * (e.getYear() + 1900) + 100 * (e.getMonth() + 1) + e.getDate();
// };
// window.get_time_day_str = function (e) {
//     var t = new Date();
//     if (e) {
//         t = new Date(e);
//     }
//     var o = t.getMonth() + 1;
//     var i = t.getDate();
//     return t.getFullYear() + "-" + (o > 9 ? o : "0" + o) + "-" + (i > 9 ? i : "0" + i);
// };
// window.huoqu_shijiezuobiao_dao_zhen_zuobiao = function (e, t) {
//     var o = cc.view.getFrameSize();
//     var i = cc.misc.clamp01(e / cc.winSize.width);
//     var n = cc.misc.clamp01(1 - t / cc.winSize.height);
//     return {
//         left: o.width * i,
//         top: o.height * n
//     };
// };
// window.huoqu_shijiechicun_dao_zhen_chicun = function (e, t) {
//     var o = cc.view.getFrameSize();
//     var i = o.width / cc.winSize.width;
//     var n = o.height / cc.winSize.height;
//     return cc.size(e * i, t * n);
// };
// window.huoqu_jiedian_dao_zhen_de_juxing = function (e) {
//     var t = cc.mat4();
//     e.getWorldMatrix(t);
//     var i = cc.v3();
//     var n = cc.v3();
//     var a = e.width;
//     var s = e.height;
//     t.getTranslation(i);
//     t.getScale(n);
//     var r = n.x;
//     var c = cc.v2(i).add(cc.v2((0 - e.anchorX) * a * r, (1 - e.anchorY) * s * r));
//     var l = huoqu_shijiezuobiao_dao_zhen_zuobiao(c.x, c.y);
//     var d = huoqu_shijiechicun_dao_zhen_chicun(a * r, s * r);
//     return o({}, l, {
//         width: d.width,
//         height: d.height
//     });
// };
// window.ailin_get_data_for_key = function (e, t) {
//     if (void 0 === t) {
//         t = "";
//     }
//     var o = cc.sys.localStorage.getItem(e);
//     return null === o || "" === o ? t + "" : o;
// };
// window.compare_version = function (e, t) {
//     var o;
//     var i;
//     var n = /(\d+)\.(\d+)\.(\d+)/;
//     try {
//         if (4 !== e.match(n).length || 4 !== t.match(n).length) {
//             return void console.log("Error compare_version", "param");
//         }
//     } catch (e) {
//         return void console.log("Error compare_version", "param");
//     }
//     o = e.match(n).slice(1, 4);
//     i = t.match(n).slice(1, 4);
//     for (var a = 0; a < 3; a++) {
//         if (o[a] < i[a]) {
//             return !1;
//         }
//     }
//     return !0;
// };
// window.ailin_user_default = {
//     get_bool_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = "false";
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         if (!("false" == t)) {
//             t = t ? "true" : "false";
//         }
//         return "true" == ailin_get_data_for_key(e, t);
//     },
//     get_int_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = 0;
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         var o = ailin_get_data_for_key(e, t);
//         return parseInt(o);
//     },
//     get_string_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = "";
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         return ailin_get_data_for_key(e, t);
//     },
//     get_float_for_key: function (e, t) {
//         if (void 0 === t) {
//             t = 0;
//         }
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         var o = ailin_get_data_for_key(e, t);
//         return parseFloat(o);
//     },
//     set_data_for_key: function (e, t) {
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         cc.sys.localStorage.setItem(e, t);
//     },
//     set_bool_for_key: function (e, t) {
//         if ("lieyouH5" == release_platform) {
//             e += oppo_get_online_dataId;
//         }
//         t = t ? "true" : "false";
//         cc.sys.localStorage.setItem(e, t);
//     }
// };
// window.ailin_get_time = function () {
//     return new Date().getTime();
// };
// window.ailin_get_time_day = function () {
//     var e = new Date();
//     return 1e4 * (e.getYear() + 1900) + 100 * (e.getMonth() + 1) + e.getDate();
// };
// window.ailin_cover_object_data = function (e, t) {
//     var o = Object.keys(t);
//     for (var i = 0; i < o.length; i++) {
//         e[o[i]] = t[o[i]];
//     }
// };
// window.ailin_add_touch_event = function (e, t, o) {
//     if (void 0 === o) {
//         o = !0;
//     }
//     if (o && 0 == ailin_sdk_manager.native_trigger_mode) {
//         try {
//             e.addComponent(cc.Button);
//         } catch (e) {}
//         e.off("click");
//         e.on("click", function () {
//             t();
//         });
//     } else {
//         e.off(cc.Node.EventType.TOUCH_START);
//         e.on(cc.Node.EventType.TOUCH_START, function () {
//             t();
//         });
//     }
// };
// window.tips_str = module.exports = {
//     getPraiseTitle: function () {
//         return ailin.Language_ch ? "评价" : "Praise";
//     },
//     getPraiseString: function () {
//         var e = "如果你喜欢我们的游戏,请给我们点赞！";
//         if (!ailin.Language_ch) {
//             e = "If you like our game, please give us a like!";
//         }
//         return e;
//     },
//     getProductDoesNotString: function (e) {
//         return ailin.Language_ch ? "商品 " + e + " 不存在！" : "The product " + e + " does not exist!";
//     },
//     getTimedOut: function () {
//         return ailin.Language_ch ? "请求超时！" : "Request timed out!";
//     },
//     getSuccessStr: function () {
//         return ailin.Language_ch ? "成功！" : "Success!";
//     },
//     getFailStr: function () {
//         return ailin.Language_ch ? "失败！" : "Fail!";
//     },
//     getErrorStr: function () {
//         return ailin.Language_ch ? "异常！" : "Error!";
//     },
//     getParameterError: function () {
//         return ailin.Language_ch ? "参数错误！" : "Parameter Error!";
//     }
// };


/**
 * 优化后的代码
 * 1. 使用ES6语法，包括箭头函数、模板字符串等。
 * 2. 变量名更具可读性。
 * 3. 增加了完整的注释。
 * 4. 保持原有逻辑不变。
 */

const mergeObjects = (target, ...sources) => {
    sources.forEach(source => {
        if (source) {
            Object.keys(source).forEach(key => {
                if (Object.prototype.hasOwnProperty.call(source, key)) {
                    target[key] = source[key];
                }
            });
        }
    });
    return target;
};

const getLocalStorageItem = (key, defaultValue = '') => {
    const value = cc.sys.localStorage.getItem(key);
    return value === null || value === '' ? `${defaultValue}` : value;
};

require("./AL_Framework_Sdk_Ad_Config_Data");

window.spot_data = [];
window.pause_spot_interval = 3;
window.result_spot_interval = 3;
window.pause_spot_start_index = 3;
window.result_spot_start_index = 3;
window.pause_spot_time = 10;
window.result_spot_time = 10;
window.help_open_id = "";
window.on_Hide_Have_Load_Scene = true;
window.openid = "";
window.openid_uuid = "";

window.AL_User_Info = {
    /**
     * 获取OpenID
     * @returns {string}
     */
    huoqu_open_id: () => user_default.get_string_for_key("openid", openid),

    /**
     * 设置OpenID
     * @param {string} id
     */
    shezhi_open_id: id => {
        openid = id;
        user_default.set_data_for_key("openid", id);
    },

    /**
     * 获取OpenUuid
     * @returns {string}
     */
    huoqu_open_id: () => user_default.get_string_for_key("ailin_sdk_openid_uuid", openid_uuid)
};

// if (!window.wsurl) {
//     window.wsurl = `wss://battle.flowerme.com/battle/v2/726f6f6d?uid=${openid}`;
// }

if (!window.u_info) {
    window.u_info = {
        gameid: 100001,
        uid: openid,
        nick: "好友",
        icon: "",
        sex: 0,
        city: "",
        country: "",
        province: "",
        from: "wechat"
    };
}

window.match_info = {
    nick: "好友",
    icon: "",
    sex: 0,
    city: "",
    country: "",
    province: "",
    from: "wechat"
};

// window.main_Scnee_From_Small_Game = false;
// window.main_game_scene = "";
// window.localCardKey = "localCardNum";
// window.netCardNum = 0;
// window.canGetNetCardNum = true;
// window.getNetCardTime = 10000;
// window.canGetLocalCard = false;
// window.getLocalCareId = "";

// window.wxData = {
//     WXforward: "",
//     session_key: "",
//     appId: window.wx_app_id,
//     appSecret: window.wx_app_secret,
//     bannerID: "",
//     params: null,
//     checkShareSuccessNumIntervalTime: 10,
//     shareOnlineData: "",
//     bannerOnlindDelayTime: 50,
//     shareData: [],
//     moreGameData: []
// };

// window.quickGame = {
//     awardGoldDouble: 1,
//     awardGoldTime: 30,
//     RecommendIconData: [],
//     RecommendBannerData: [],
//     awardGoldData: [],
//     adBaseUrl: ""
// };

window.PI = 3.141592654;

window.ailin = module.exports = {
    Props_Base_Gold: 800,
    Key_OncePlayerTime: "begingGameTime",
    Key_OncePlayerTimeDay: "begingGameTimeDay",
    Key_NewPlayer: "isNewPlayer",
    Key_Diamond: "Key_Diamond",
    Key_Gold: "Key_Gold",
    Key_Music: "Key_BgMusic",
    Key_Sound: "Key_Sound",
    Key_Vibrate: "Key_Vibrate",
    _SceneScale: 1,
    _offsetX: 0,
    _offsetY: 0,
    Language_ch: true
};

window.language = "zh";
if (cc.sys.language !== cc.sys.LANGUAGE_CHINESE) {
    ailin.Language_ch = false;
    language = "zh";
}

window.AL_CLOSE_TYPE = {
    ONEDAY: "ONEDAY",
    ONEWEEK: "ONEWEEK",
    January: "January",
    lasting: "lasting"
};

window.AL_Order_Status = {
    ready: 0,
    buy: 1,
    cancel: 2,
    fail: 3,
    give: 4
};

window.AL_AD_TYPE = {
    END: "GAMEEND",
    FAIL: "FAIL",
    WIN: "WIN",
    TRUN: "TRUN",
    SIGN: "SIGN",
    SKIN: "SKIN",
    FREEGOLD: "FREEGOLD",
    ACHIEVE: "ACHIEVE",
    OTHER: "OTHER"
};

window.user_default = module.exports = {
    get_bool_for_key: (key, defaultValue = "false") => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return getLocalStorageItem(key, defaultValue) === "true";
    },

    get_int_for_key: (key, defaultValue = 0) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return parseInt(getLocalStorageItem(key, defaultValue));
    },

    get_string_for_key: (key, defaultValue = "") => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return getLocalStorageItem(key, defaultValue);
    },

    get_float_for_key: (key, defaultValue = 0) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return parseFloat(getLocalStorageItem(key, defaultValue));
    },

    set_data_for_key: (key, value) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        cc.sys.localStorage.setItem(key, value);
    },

    set_bool_for_key: (key, value) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        cc.sys.localStorage.setItem(key, value ? "true" : "false");
    }
};

window.get_random = (min, max) => {
    const range = max - min;
    return parseInt(Math.random() * range) + min;
};

window.get_can_share = () => {
    return cc.sys.platform === cc.sys.WECHAT_GAME && wxServerVersion >= wx_game_version;
};

window.getTime = () => new Date().getTime();

window.get_time_day = () => {
    const date = new Date();
    return 10000 * (date.getYear() + 1900) + 100 * (date.getMonth() + 1) + date.getDate();
};

window.get_time_day_str = (timestamp) => {
    const date = timestamp ? new Date(timestamp) : new Date();
    const month = date.getMonth() + 1;
    const day = date.getDate();
    return `${date.getFullYear()}-${month > 9 ? month : "0" + month}-${day > 9 ? day : "0" + day}`;
};

window.huoqu_shijiezuobiao_dao_zhen_zuobiao = (x, y) => {
    const frameSize = cc.view.getFrameSize();
    const normalizedX = cc.misc.clamp01(x / cc.winSize.width);
    const normalizedY = cc.misc.clamp01(1 - y / cc.winSize.height);
    return {
        left: frameSize.width * normalizedX,
        top: frameSize.height * normalizedY
    };
};

window.huoqu_shijiechicun_dao_zhen_chicun = (width, height) => {
    const frameSize = cc.view.getFrameSize();
    const scaleX = frameSize.width / cc.winSize.width;
    const scaleY = frameSize.height / cc.winSize.height;
    return cc.size(width * scaleX, height * scaleY);
};

window.huoqu_jiedian_dao_zhen_de_juxing = (node) => {
    const worldMatrix = cc.mat4();
    node.getWorldMatrix(worldMatrix);
    const translation = cc.v3();
    const scale = cc.v3();
    const nodeWidth = node.width;
    const nodeHeight = node.height;
    worldMatrix.getTranslation(translation);
    worldMatrix.getScale(scale);
    const scaleX = scale.x;
    const offset = cc.v2((0 - node.anchorX) * nodeWidth * scaleX, (1 - node.anchorY) * nodeHeight * scaleX);
    const position = cc.v2(translation).add(offset);
    const rectPosition = huoqu_shijiezuobiao_dao_zhen_zuobiao(position.x, position.y);
    const rectSize = huoqu_shijiechicun_dao_zhen_chicun(nodeWidth * scaleX, nodeHeight * scaleX);
    return mergeObjects({}, rectPosition, {
        width: rectSize.width,
        height: rectSize.height
    });
};

window.ailin_get_data_for_key = (key, defaultValue = '') => {
    const value = cc.sys.localStorage.getItem(key);
    return value === null || value === '' ? `${defaultValue}` : value;
};

window.compare_version = (version1, version2) => {
    const versionPattern = /(\d+)\.(\d+)\.(\d+)/;
    let version1Parts, version2Parts;

    try {
        if (version1.match(versionPattern).length !== 4 || version2.match(versionPattern).length !== 4) {
            console.log("Error compare_version", "param");
            return;
        }
    } catch (error) {
        console.log("Error compare_version", "param");
        return;
    }

    version1Parts = version1.match(versionPattern).slice(1, 4);
    version2Parts = version2.match(versionPattern).slice(1, 4);

    for (let i = 0; i < 3; i++) {
        if (version1Parts[i] < version2Parts[i]) {
            return false;
        }
    }
    return true;
};

window.ailin_user_default = {
    get_bool_for_key: (key, defaultValue = "false") => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return ailin_get_data_for_key(key, defaultValue) === "true";
    },

    get_int_for_key: (key, defaultValue = 0) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return parseInt(ailin_get_data_for_key(key, defaultValue));
    },

    get_string_for_key: (key, defaultValue = "") => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return ailin_get_data_for_key(key, defaultValue);
    },

    get_float_for_key: (key, defaultValue = 0) => {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        return parseFloat(ailin_get_data_for_key(key, defaultValue));
    },

    set_data_for_key: function (key, value) {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        cc.sys.localStorage.setItem(key, value);
    },

    set_bool_for_key: function (key, value) {
        if ("lieyouH5" === release_platform) {
            key += oppo_get_online_dataId;
        }
        cc.sys.localStorage.setItem(key, value ? "true" : "false");
    }
};

window.ailin_get_time = () => new Date().getTime();

window.ailin_get_time_day = () => {
    const date = new Date();
    return 10000 * (date.getYear() + 1900) + 100 * (date.getMonth() + 1) + date.getDate();
};

window.ailin_cover_object_data = (target, source) => {
    Object.keys(source).forEach(key => {
        target[key] = source[key];
    });
};

window.ailin_add_touch_event = (node, callback, useNative = true) => {
    if (useNative && ailin_sdk_manager.native_trigger_mode === 0) {
        try {
            node.addComponent(cc.Button);
        } catch (e) {}
        node.off("click");
        node.on("click", () => {
            callback();
        });
    } else {
        node.off(cc.Node.EventType.TOUCH_START);
        node.on(cc.Node.EventType.TOUCH_START, () => {
            callback();
        });
    }
};

window.tips_str = module.exports = {
    getPraiseTitle: () => ailin.Language_ch ? "评价" : "Praise",

    getPraiseString: () => ailin.Language_ch ? "如果你喜欢我们的游戏,请给我们点赞！" : "If you like our game, please give us a like!",

    getProductDoesNotString: (product) => ailin.Language_ch ? `商品 ${product} 不存在！` : `The product ${product} does not exist!`,

    getTimedOut: () => ailin.Language_ch ? "请求超时！" : "Request timed out!",

    getSuccessStr: () => ailin.Language_ch ? "成功！" : "Success!",

    getFailStr: () => ailin.Language_ch ? "失败！" : "Fail!",

    getErrorStr: () => ailin.Language_ch ? "异常！" : "Error!",

    getParameterError: () => ailin.Language_ch ? "参数错误！" : "Parameter Error!"
};
